import { createI18n } from 'vue-i18n'
import type { LocaleMessages, VueMessageType } from 'vue-i18n'

// 定义语言国际化内容

/**
 * 说明：
 * 须在 pages 下新建文件夹（建议 `要国际化界面目录` 与 `i18n 目录` 相同，方便查找），
 * 注意国际化定义的字段，不要与原有的定义字段相同。
 * 1、/src/i18n/lang 下的 ts 为框架的国际化内容
 * 2、/src/i18n/pages 下的 ts 为各界面的国际化内容
 * 3、打包后可以通过修改 public/i18n 目录下的语言文件来更新翻译
 */

// element plus 自带国际化
import enLocale from 'element-plus/es/locale/lang/en'
import zhcnLocale from 'element-plus/es/locale/lang/zh-cn'
import zhtwLocale from 'element-plus/es/locale/lang/zh-tw'
import type { Language } from 'element-plus/es/locale'

// 类型定义
type LocaleType = 'en' | 'zh-cn' | 'zh-tw'
// type LocaleModule = {
//   default: LocaleMessages<VueMessageType>
// }

interface I18nConfig {
  name: string
  el: Language['el']
  msg: LocaleMessages<VueMessageType>
}

// 定义变量内容
const messages: Record<LocaleType, I18nConfig> = {} as Record<LocaleType, I18nConfig>

// 原本的对象
const element: Record<string, Language> = {}

// {en: enLocale, 'zh-cn': zhcnLocale, 'zh-tw': zhtwLocale}
// 导入库的底层多语言
for (const key in window.__env__.local) {
  const curLocal = window.__env__.local[key]
  if (curLocal.module == 'en') {
    // import('element-plus/es/locale/lang/en').then((res) => {
    //   element[key] = res.default
    // })
    element[key] = enLocale
  } else if (curLocal.module == 'zh-cn') {
    // import('element-plus/es/locale/lang/zh-cn').then((res) => {
    //   element[key] = res.default
    // })
    element[key] = zhcnLocale
  } else if (curLocal.module == 'zh-tw') {
    // import('element-plus/es/locale/lang/zh-tw').then((res) => {
    //   element[key] = res.default
    // })
    element[key] = zhtwLocale
  } else {
    throw new Error(`未找到相应的语言包${key}`)
  }
}

for (const key in window.__env__.local) {
  const locale = key as LocaleType
  // module 为 绑定的那个底层组件库语言包, 如果没有找到拓展的包内容则使用其他拓展包
  // 例如: bjrm 拓展包没有找到, 则使用 module 的拓展包
  const module = window.__env__.local[key].module as LocaleType
  messages[locale] = {
    name: locale,
    el: element[locale].el,
    msg: window.__env__[locale] ?? window.__env__[module],
  }
}

const themeConfig = {
  globalI18n: 'zh-cn' as LocaleType,
}

console.log(`output-> messages`, messages)

// 导出语言国际化
// https://vue-i18n.intlify.dev/guide/essentials/fallback.html#explicit-fallback-with-one-locale
export const i18n = createI18n({
  legacy: false, // 使用 Composition API 语法
  silentTranslationWarn: true, // 忽略翻译警告
  missingWarn: false, // 忽略缺失翻译警告
  silentFallbackWarn: true, // 忽略回退警告
  fallbackWarn: false, // 忽略回退警告
  locale: themeConfig.globalI18n, // 设置当前语言
  fallbackLocale: zhcnLocale.name, // 设置回退语言
  messages: messages as unknown as Record<string, LocaleMessages<VueMessageType>>, // 设置国际化内容
})
